<?php

require 'vendor/autoload.php';  // Подключение автозагрузчика Composer

use Goutte\Client;
use Symfony\Component\HttpClient\HttpClient;
use PhpOffice\PhpWord\PhpWord;
use PhpOffice\PhpWord\IOFactory;
use PhpOffice\PhpWord\SimpleType\TblWidth;

// Создание клиента 
$client = new Client(HttpClient::create());

// Переход на страницу входа
$crawler = $client->request('GET', 'https://gkh-altai22.ru/moodle/login/index.php');
echo "Перешли на страницу входа\n";

// Сохранение HTML страницы входа для отладки
file_put_contents('login_page.html', $crawler->html());
echo "Сохранена страница входа в login_page.html\n";

// Проверка наличия формы входа
if ($crawler->filter('form')->count() > 0) {
    echo "Найдена форма входа\n";
    
    // Найти все поля формы и вывести их имена для отладки
    $crawler->filter('input')->each(function ($node) {
        echo "Поле: " . $node->attr('name') . "\n";
    });
    
    // Аутентификация
    $form = $crawler->selectButton('Вход')->form();
    
    $crawler = $client->submit($form, [
        'username' => 'medvedeva_yu', 
        'password' => 'Yullya29!'
    ]);
    echo "Произвели аутентификацию\n";
} else {
    echo "Форма входа не найдена\n";
    exit;
}

// Сохранение HTML страницы после аутентификации для отладки
file_put_contents('after_login_page.html', $crawler->html());
echo "Сохранена страница после аутентификации в after_login_page.html\n";

// Переход на страницу с таблицей
$crawler = $client->request('GET', 'https://gkh-altai22.ru/moodle/mod/quiz/report.php?id=263&mode=overview');
echo "Перешли на страницу с таблицей\n";

// Сохранение HTML страницы с таблицей для отладки
file_put_contents('table_page.html', $crawler->html());
echo "Сохранена страница с таблицей в table_page.html\n";

// Функция для обработки попыток
function processAttempt($client, $attemptId, $cmid) {
    // Переход на страницу с первым вопросом
    $crawler = $client->request('GET', "https://gkh-altai22.ru/moodle/mod/quiz/review.php?attempt=$attemptId&cmid=$cmid");
    echo "Перешли на страницу с первым вопросом\n";

    // Сохранение HTML страницы с первым вопросом для отладки
    file_put_contents("question_page_$attemptId.html", $crawler->html());
    echo "Сохранена страница с первым вопросом в question_page_$attemptId.html\n";

    // Проверка наличия элемента с ответом
    if ($crawler->filter('.answer input[type="text"]')->count() > 0) {
        // Извлечение текста ответа
        $answerText = $crawler->filter('.answer input[type="text"]')->first()->attr('value');
        echo "Извлечен текст ответа: $answerText\n";
        
        // Переход на страницу результатов теста
        $crawler = $client->request('GET', "https://gkh-altai22.ru/moodle/mod/quiz/review.php?attempt=$attemptId&cmid=$cmid");
        echo "Перешли на страницу результатов теста\n";
        
        // Сохранение HTML страницы с результатами теста для отладки
        file_put_contents("results_page_$attemptId.html", $crawler->html());
        echo "Сохранена страница с результатами теста в results_page_$attemptId.html\n";
        
        // Подсчет количества элементов с title="Верно" и title="Неверно"
        $correctCount = 0;
        $incorrectCount = 0;
        
        $crawler->filter('a[title="Верно"]')->each(function ($node) use (&$correctCount) {
            $correctCount++;
        });
        
        $crawler->filter('a[title="Неверно"]')->each(function ($node) use (&$incorrectCount) {
            $incorrectCount++;
        });
        
        echo "Количество верных ответов: $correctCount\n";
        echo "Количество неверных ответов: $incorrectCount\n";
        
        // Вычисление индикатора риска
        $riskIndicator = $incorrectCount / ($correctCount ?: 1); // Предотвращение деления на ноль
        echo "Индикатор риска: $riskIndicator\n";
        
        // Определение категории риска и добавление соответствующего текста
        $riskCategory = '';
        $additionalText = '';

        if ($riskIndicator < 0.1) {
            $riskCategory = "Низкий риск";
            $additionalText = "Информирование";
        } elseif ($riskIndicator < 0.5) {
            $riskCategory = "Умеренный риск";
            $additionalText = "Объявление предостережений, консультирование";
        } elseif ($riskIndicator < 0.7) {
            $riskCategory = "Средний риск";
            $additionalText = "Обобщение правоприменительной практики";
        } else {
            $riskCategory = "Высокий риск";
            $additionalText = "Профилактический визит";
        }

        // Возвращение результатов для дальнейшей обработки
        return [
            'answerText' => $answerText,
            'correctCount' => $correctCount,
            'incorrectCount' => $incorrectCount,
            'riskIndicator' => $riskIndicator,
            'riskCategory' => $riskCategory,
            'additionalText' => $additionalText,
        ];
    } else {
        echo "Элемент с ответом не найден\n";
        return null;
    }
}

// Массив для хранения результатов
$results = [];

// Обработка первой попытки
$result = processAttempt($client, 52, 263);
if ($result !== null) {
    $results[] = $result;
}

// Обработка второй попытки
$result = processAttempt($client, 53, 263);
if ($result !== null) {
    $results[] = $result;
}

// Сортировка массива результатов по категории риска
usort($results, function ($a, $b) {
    $order = ['Высокий риск', 'Средний риск', 'Умеренный риск', 'Низкий риск'];
    return array_search($a['riskCategory'], $order) <=> array_search($b['riskCategory'], $order);
});

// Создание нового документа
$phpWord = new PhpWord();
$section = $phpWord->addSection();

// Создание таблицы с заголовками
$table = $section->addTable();
$table->addRow();
$table->addCell(2000, ['borderSize' => 6, 'borderColor' => '000000'])->addText('Организация');
$table->addCell(2000, ['borderSize' => 6, 'borderColor' => '000000'])->addText('Количество правильных ответов');
$table->addCell(2000, ['borderSize' => 6, 'borderColor' => '000000'])->addText('Количество неправильных ответов');
$table->addCell(2000, ['borderSize' => 6, 'borderColor' => '000000'])->addText('Индикатор риска');
$table->addCell(2000, ['borderSize' => 6, 'borderColor' => '000000'])->addText('Категория риска');
$table->addCell(2000, ['borderSize' => 6, 'borderColor' => '000000'])->addText('Контрольно-надзорные мероприятия');

// Добавление отсортированных результатов в таблицу
foreach ($results as $result) {
    $table->addRow();
    $table->addCell(2000, ['borderSize' => 6, 'borderColor' => '000000'])->addText($result['answerText']);
    $table->addCell(2000, ['borderSize' => 6, 'borderColor' => '000000'])->addText($result['correctCount']);
    $table->addCell(2000, ['borderSize' => 6, 'borderColor' => '000000'])->addText($result['incorrectCount']);
    $table->addCell(2000, ['borderSize' => 6, 'borderColor' => '000000'])->addText($result['riskIndicator']);
    $table->addCell(2000, ['borderSize' => 6, 'borderColor' => '000000'])->addText($result['riskCategory']);
    $table->addCell(2000, ['borderSize' => 6, 'borderColor' => '000000'])->addText($result['additionalText']);
}

// Сохранение документа
$filename = 'question.docx';
$xmlWriter = IOFactory::createWriter($phpWord, 'Word2007');
$xmlWriter->save($filename);
echo "Сохранен документ в $filename\n";
